﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmAdherente : Form
    {
        private int adherente_id { get; set; }
        private string operacion { get; set; }
        private int fila { get; set; }

        public Adherente _adherente { get; set; }
        public enum Parentescos
        {
            H,
            N,
            C,
            O,
            M,
            E,
            P,
            Y,
            S,
        }

        public frmAdherente()
        {
            InitializeComponent();
        }

        public frmAdherente(Adherente adherente, string _operacion, int row)
        {
            _adherente = adherente;
            operacion = _operacion;
            fila = row;
            InitializeComponent();
        }

        private void frmAdherente_Load(object sender, EventArgs e)
        {
            IniciarControles();
            GetParentescos();
            GetLocalidades();
            if (string.IsNullOrEmpty(operacion))
            {

            }

            if (operacion == "EDITAR")
            {
                txtApellido.Text = _adherente.apellido;
                txtAdicional.Text = _adherente.adicional;
                txtNombres.Text = _adherente.nombres;
                dtpFechaNacimiento.Value = _adherente.fecha_nacimiento;
                txtCodigo.Text = _adherente.id.ToString();
                txtConvenio.Text = _adherente.convenio;
                txtDireccion.Text = _adherente.direccion;
                txtDocumento.Text = _adherente.documento;
                txtEdad.Text = _adherente.edad.ToString();
                txtEmail.Text = _adherente.email;
                txtNombres.Text = _adherente.nombres;
                txtObservaciones.Text = _adherente.observaciones;
                txtTelefono.Text = _adherente.telefono;
                dtpFechaIngreso.Value = _adherente.fecha_ingreso;
                dtpVigencia.Value = _adherente.vigencia;
                cmbLocalidad.Text = _adherente.localidad.localidad;
                cmbZona.Text = _adherente.zona.zona;
                cmbParentesco.Text = _adherente.parentesco;
                ckbActivo.Checked = Convert.ToBoolean(_adherente.activo);
                ckbPami.Checked = Convert.ToBoolean(_adherente.pami);
            }
        }



        private void GetLocalidades()
        {
            try
            {
                cmbLocalidad.ValueMember = "id";
                cmbLocalidad.DisplayMember = "localidad";
                cmbLocalidad.DataSource = Localidades.FindAll();

                if (cmbLocalidad.Items.Count != 0)
                {
                    GetZonasPorLocalidad(Convert.ToInt32(cmbLocalidad.SelectedValue));
                }
                else
                {
                    cmbZona.DataSource = null;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void GetZonasPorLocalidad(int localidad_id)
        {
            try
            {
                cmbZona.ValueMember = "id";
                cmbZona.DisplayMember = "zona";
                cmbZona.DataSource = Negocio.Zonas.FindAllPorLocalidad(localidad_id);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private Boolean ValidarForm()
        {
            bool resultado = true;
            error.Clear();

            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                resultado = false;
                error.SetError(txtApellido, "Debe completar el campo Apellido.");
                return resultado;
            }
            if (string.IsNullOrEmpty(txtNombres.Text))
            {
                resultado = false;
                error.SetError(txtNombres, "Debe completar el campo Nombres.");
                return resultado;
            }
            if (string.IsNullOrEmpty(txtDocumento.Text))
            {
                txtDocumento.Text = "NO INFORMA";
            }
            if (string.IsNullOrEmpty(txtDireccion.Text))
            {
                resultado = false;
                error.SetError(txtDireccion, "Debe completar el campo Dirección.");
                return resultado;
            }
            if (cmbParentesco.SelectedIndex == -1)
            {
                resultado = false;
                error.SetError(cmbParentesco, "Debe seleccionar un Parentesco.");
                return resultado;
            }
            if (string.IsNullOrEmpty(txtEdad.Text))
            {
                resultado = false;
                error.SetError(txtEdad, "Debe completar el campo Edad.");
                return resultado;
            }
            if (string.IsNullOrEmpty(txtAdicional.Text))
            {
                txtAdicional.Text = "NO INFORMA";
            }

            if (string.IsNullOrEmpty(txtConvenio.Text))
            {
                txtConvenio.Text = "NO INFORMA";
            }

            if (string.IsNullOrEmpty(txtTelefono.Text))
            {
                txtTelefono.Text = "NO INFORMA";
            }

            if (string.IsNullOrEmpty(txtEmail.Text))
            {
                txtEmail.Text = "NO INFORMA";
            }

            if (string.IsNullOrEmpty(txtObservaciones.Text))
            {
                txtObservaciones.Text = "NO INFORMA";
            }

            return resultado;
        }

        private void IniciarControles()
        {
            txtCodigo.Text = string.Empty;
            txtDireccion.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtNombres.Text = string.Empty;
            txtObservaciones.Text = string.Empty;
            txtTelefono.Text = string.Empty;
            txtApellido.Text = string.Empty;
            txtEdad.Text = string.Empty;
            dtpVigencia.Enabled = false;

            txtCodigo.Enabled = false;
            ckbActivo.CheckState = CheckState.Checked;

            this.ActiveControl = txtApellido;
        }
        private void GetParentescos()
        {
            cmbParentesco.Items.Clear();
            foreach (var item in Enum.GetValues(typeof(Parentescos)))
            {
                cmbParentesco.Items.Add(item);
            }
        }

        private void cmbLocalidad_SelectionChangeCommitted(object sender, EventArgs e)
        {
            GetZonasPorLocalidad(Convert.ToInt32(cmbLocalidad.SelectedValue));
        }

        public string CalcularEdad(DateTime cumpleanos)
        {
            DateTime actual = DateTime.Today;
            int edad = actual.Year - cumpleanos.Year;
            if (actual < cumpleanos.AddYears(edad)) edad--;

            return edad.ToString();
        }

        private void dtpFechaNacimiento_ValueChanged(object sender, EventArgs e)
        {
            txtEdad.Text = CalcularEdad(dtpFechaNacimiento.Value);

        }

        private void CalcularCarencia(DateTime fecha_ingreso, int edad)
        {
            try
            {
                if (edad == -1)
                    edad = 0;

                Carencia carencia = Carencias.FindByEdad(edad);

                DateTime fecha_cobertura = fecha_ingreso.AddMonths(carencia.periodo);
                dtpVigencia.Value = fecha_cobertura;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaIngreso_ValueChanged(object sender, EventArgs e)
        {
            CalcularCarencia(dtpFechaIngreso.Value, Convert.ToInt32(txtEdad.Text));
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (ValidarForm() == true)
            {
                if (string.IsNullOrEmpty(operacion) || operacion == "EDITAR")
                {
                    try
                    {
                        string codigo = string.Empty;
                        if (string.IsNullOrEmpty(txtCodigo.Text))
                        {
                            codigo = "0";
                        }
                        else
                        {
                            codigo = txtCodigo.Text;
                        }

                        _adherente = new Adherente();

                        _adherente.id = Convert.ToInt32(codigo);
                        _adherente.activo = Convert.ToInt32(ckbActivo.CheckState);
                        _adherente.adicional = txtAdicional.Text;
                        _adherente.apellido = txtApellido.Text;
                        _adherente.convenio = string.Empty;
                        _adherente.direccion = txtDireccion.Text;
                        _adherente.documento = txtDocumento.Text;
                        _adherente.email = txtEmail.Text;
                        _adherente.fecha_ingreso = dtpFechaIngreso.Value;
                        _adherente.fecha_nacimiento = dtpFechaNacimiento.Value;
                        _adherente.localidad = (Localidad)cmbLocalidad.SelectedItem;
                        _adherente.nombres = txtNombres.Text;
                        _adherente.observaciones = txtObservaciones.Text;
                        _adherente.parentesco = cmbParentesco.Text;
                        _adherente.telefono = txtTelefono.Text;
                        _adherente.vigencia = dtpVigencia.Value;
                        _adherente.zona = (Zona)cmbZona.SelectedItem;
                        _adherente.pami = Convert.ToInt32(ckbPami.Checked);
                        _adherente.convenio = txtConvenio.Text;
                        _adherente.edad = Convert.ToInt32(txtEdad.Text);

                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtDocumento, "Solo se permiten números en el campo Documento.");
                e.Handled = true;
                return;
            }
        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtDocumento, "Solo se permiten números en el campo Teléfono.");
                e.Handled = true;
                return;
            }
        }

        private void txtEdad_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEdad.Text))
            {
                CalcularCarencia(dtpFechaIngreso.Value, Convert.ToInt32(txtEdad.Text));
            }
        }

    }
}
